//预浏览图片
function previewImgs(imgs, index) {
	uni.previewImage({
		current: index,
		urls: imgs,
		longPressActions: {
			itemList: ['发送给朋友', '保存图片', '收藏'],
			success: function(data) {
				console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片');
			},
			fail: function(err) {
				console.log(err.errMsg);
			}
		}
	});
}
// 通知公告基本信息附件，和图片信息处理 公共的
function filterImageData(data, imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp']) {
	// 将后缀列表转换为Set，提高查找效率
	const imageExtSet = new Set(imageExtensions);
	// 筛选图片类型数据
	const showimages = data.filter(item => imageExtSet.has(item.extName.toLowerCase())).map(item => item.previewURL);
	const images = data.filter(item => imageExtSet.has(item.extName.toLowerCase()));
	// 筛选非图片类型数据（使用补集逻辑）
	const others = data.filter(item => !imageExtSet.has(item.extName.toLowerCase()));
	console.log(images, others)
	return {
		showimages,
		images,
		others
	};
}
//判断是否是图片类型
function isImageExtension(extName) {
	const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.svg', '.tiff'];
	return imageExtensions.includes(extName.toLowerCase());
}
// 预浏览pdf
function previewPDF(url) {
	uni.navigateTo({
		url: '/pages/PDF?src=' + url
	});
}
// 下载文件
function downloadFile(url, name) {
	uni.showLoading({
		title: '下载中...'
	});

	// 检查文件是否已存在
	const publicPath = `_downloads/${name}`;
	plus.io.resolveLocalFileSystemURL(publicPath,
		(entry) => {
			uni.hideLoading();
			uni.showToast({
				title: '文件已存在，无需重复下载',
				icon: 'none'
			});
		},
		(err) => {
			// 文件不存在，继续下载
			uni.downloadFile({
				url: url,
				success: (res) => {
					if (res.statusCode === 200) {
						// #ifdef APP-PLUS
						this.saveToPublicDirectory(res.tempFilePath, name);
						// #endif

						// #ifndef APP-PLUS
						uni.hideLoading();
						uni.showToast({
							title: '文件已下载，请查看下载管理',
							icon: 'none'
						});
						// #endif
					}
				},
				fail: (err) => {
					uni.hideLoading();
					uni.showToast({
						title: '下载失败',
						icon: 'none'
					});
				}
			});
		}
	);
}
function saveToPublicDirectory(tempFilePath, fileName) {
	// #ifdef APP-PLUS
	const publicPath = `_downloads/${fileName}`;

	plus.io.resolveLocalFileSystemURL(tempFilePath,
		(entry) => {
			plus.io.resolveLocalFileSystemURL('_downloads/',
				(dirEntry) => {
					entry.copyTo(dirEntry, fileName,
						(newEntry) => {
							uni.hideLoading();
							console.log('保存成功:', newEntry.fullPath);
							// 只提示路径，不提供预览
							uni.showToast({
								title: `文件已保存到：手机内部存储/Download/${fileName}`,
								icon: 'none',
								duration: 3000
							});
						},
						(error) => {
							uni.hideLoading();
							console.error('保存失败:', error);
							uni.showToast({
								title: '保存失败',
								icon: 'none'
							});
						}
					);
				},
				(error) => {
					uni.hideLoading();
					console.error('获取下载目录失败:', error);
					uni.showToast({
						title: '无法访问下载目录',
						icon: 'none'
					});
				}
			);
		},
		(error) => {
			uni.hideLoading();
			console.error('读取临时文件失败:', error);
			uni.showToast({
				title: '文件读取失败',
				icon: 'none'
			});
		}
	);
	// #endif
}

function extractFileName(url) {
	try {
		// 处理可能为空的输入
		if (!url || typeof url !== 'string') {
			return '';
		}

		// 解码 URL 以处理特殊字符
		const decodedUrl = decodeURI(url);

		// 提取路径部分（去除协议和域名）
		const pathStartIndex = decodedUrl.indexOf('//') > -1 ?
			decodedUrl.indexOf('/', decodedUrl.indexOf('//') + 2) :
			0;
		const path = decodedUrl.substring(pathStartIndex);

		// 从路径中提取文件名
		const parts = path.split('/');
		const filenameWithParams = parts[parts.length - 1];

		// 处理可能包含的查询参数和哈希值
		const filename = filenameWithParams.split('?')[0].split('#')[0];

		return filename || '';
	} catch (error) {
		console.error('提取文件名时出错:', error);
		return '';
	}
}
// H5环境下载方法
function _h5Download(url, fileName) {
	// 创建隐藏的<a>标签
	const link = document.createElement('a');
	link.href = url;
	link.download = fileName || 'download';
	link.style.display = 'none';

	// 添加到DOM中
	document.body.appendChild(link);

	// 触发点击
	link.click();

	// 清理DOM
	setTimeout(() => {
		document.body.removeChild(link);
	}, 100);
}

// APP/小程序环境下载方法
function _appDownload(url, fileName) {
	uni.showLoading({
		title: '下载中...',
		mask: true
	});

	uni.downloadFile({
		url: url,
		success: (res) => {
			if (res.statusCode === 200) {
				// #ifdef APP-PLUS
				const filePath = res.tempFilePath;
				uni.saveFile({
					tempFilePath: filePath,
					success: (saveRes) => {
						uni.hideLoading();
						uni.showToast({
							title: `已保存到: ${saveRes.savedFilePath}`,
							icon: 'success',
							duration: 3000
						});
					},
					fail: (err) => {
						console.error('保存失败:', err);
						uni.hideLoading();
						uni.showToast({
							title: '保存文件失败',
							icon: 'none'
						});
					}
				});
				// #endif

				// #ifdef MP-WEIXIN
				uni.hideLoading();
				uni.showToast({
					title: '下载完成',
					icon: 'success'
				});
				// 微信小程序需要用户主动打开文件
				setTimeout(() => {
					uni.openDocument({
						filePath: res.tempFilePath,
						showMenu: true // 显示右上角菜单
					});
				}, 1500);
				// #endif
			}
		},
		fail: (error) => {
			console.error('下载失败:', error);
			uni.hideLoading();
			uni.showToast({
				title: '下载失败',
				icon: 'none'
			});
		}
	});
}

function isFileOfType(ext, type) {
	const normalizedExt = String(ext).toLowerCase().replace(/^\./, '');

	// 定义各种文件类型对应的扩展名集合
	const fileTypes = {
		pdf: ['pdf'],
		document: ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx', 'txt', 'rtf'],
		image: ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg']
	};

	// 如果 type 是预定义类型名，使用对应的扩展名集合
	if (fileTypes[type]) {
		return fileTypes[type].includes(normalizedExt);
	}

	// 如果 type 是扩展名数组，直接检查
	if (Array.isArray(type)) {
		return type.includes(normalizedExt);
	}

	// 如果 type 是单个扩展名，直接比较
	return normalizedExt === type;
}
// 发送来访 复制地址
export {
	previewImgs,
	filterImageData,
	isImageExtension,
	previewPDF,
	downloadFile,
	isFileOfType
}